#ifndef AST_OPERAND
#define AST_OPERAND
#include <string>
#include "node.h"

namespace AST {

    /**
     * Operando
     *
     * Estrutura para representação de elementos simples que são utilizados em
     * relacionamentos com operadores aritméticos, sejam eles unários ou
     * binários. Possui relacionamento de tipos para comparação durante a
     * análise semântica.
     *
     * @category AST
     * @package  AST
     */
    class Operand : public Node {

    private:

        /**
         * Conteúdo Capturado pelo Token
         */
        std::string* _content;

        /**
         * Configuração do Conteúdo
         *
         * Durante o processamento e para montagem da árvore abstrata de
         * sintaxe, precisamos informar o conteúdo do Token durante a construção
         * de objeto desta estrutura.
         *
         * @param  std::string* Conteúdo do Token para Configuração
         * @return Operand*     Próprio Objeto para Encadeamento
         */
        Operand* _setContent(std::string*);

    public:

        /**
         * Construtor Padrão
         *
         * Método para construção de elementos considerados como operandos em
         * processamentos aritméticos, sejam unários ou binários. Estes
         * operandos são representados por conteúdos que devem ser informados em
         * tempo de construção do objeto.
         *
         * @param std::string* Conteúdo Capturado pelo Token
         */
        Operand(std::string*);

        /**
         * Captura de Conteúdo
         *
         * Apresentação do conteúdo reconhecido durante a leitura do código e
         * armazenado no Token apresentado. Este conteúdo é configurado em tempo
         * de construção do objeto e pode ser capturado utilizando este método.
         *
         * @return std::string* Apresentação do Conteúdo Configurado
         */
        std::string* getContent();

        // Sobrescrita
        std::string toString(int);

    };

};

#endif

